技術問答
技術文章
iT 徵才
Tag
聊天室
2024 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
第 12 屆 iThome 鐵人賽
DAY
30
0
Software Development
安全軟體開發生命週期(SSDLC)學習筆記
系列 第
30
篇
API 開發方法
12th鐵人賽
HO-HSUN
2020-10-15 19:00:35
1658 瀏覽
分享至
總覽
API 路徑(Endpoint)的一般安全準則。
注意事項
存取控制
API路徑應遵循最小特權原則。具有受保護訊息的服務應服務於最小的群體。
具有錯誤配置的存取控制的API可能導致意外的訊息洩漏,或對敏感資料進行未經授權的惡意更改狀態的操作。
問題範例:
POST,允許用戶修改帳戶訊息,而無需檢查用戶是否擁有要修改的帳戶。
一個GET請求,該請求無需身份驗證即可返回敏感的訊息性訊息。
修正方式
確定哪些API操作應被視為敏感或公開的。
對於內部API:盡可能限制網路存取。
理想情況下,這些路徑應被限制在一個封閉的網路中。
並且要求比單一API金鑰更強的身份驗證。
例如,多因子身份驗證。
對於具有敏感訊息的公開API:
在執行請求的任何操作之前,需要進行身份驗證。
API金鑰應該是可撤銷的,也可以是可更新的。
對於提供公開訊息的公開API:
確保未通過身份驗證未通過公開API執行任何狀態更改操作。
考慮速率限制,以防止單個主機在短時間內發出太多請求。
風險等級
根據情況從低到高不等。
參考資料
https://www.owasp.org/index.php/REST_Security_Cheat_Sheet
輸入驗證
傳入的資料在解析時可能格式錯誤或被設計為導致意外行為。
根據輸入的解析方式,未驗證的輸入可能包含命令注入或其他有害操作。
修正方式
類型檢查:
確保輸入為預期的資料類型,拒絕其他任何內容。
確保輸入為預期的資料類型,拒絕其他任何內容。
長度和大小檢查:
輸入應在預期的長度或大小之內。
拒絕任何大於或小於預期的內容。
將白名單接受的內容類型
限制http方法
風險等級
根據情況從低到高不等。
驗證要求
有可能在原始請求者和API路徑之間的傳輸過程中修改請求。
修改後的請求可能導致對原始請求者的資料進行狀態更改操作。
或者導致要提供的資料不正確,修改或意外。
重播攻擊
攻擊者發送了先前的真實請求,以使操作在以後的時間再次發生。
傳輸中已修改的請求:攻擊者會在發送真實請求時修改資料。
修正方式
為每個包含敏感資料或操作的請求生成簽名或HMAC(雜湊訊息驗證碼)。
檢查請求的簽名以確定其是否真實。
簽署包含時間戳記的請求,並拒絕所有相對過舊的請求。
風險等級
根據情況從低到高不等。
參考資料
https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html#why-requests-are-signed
通用安全實踐
即使遵循API的最佳安全做法,也有可能錯過其他惡意活動。
問題範例:
沒有日誌記錄或監視丟失的安全事件
返回服務後端的堆疊紀錄或其他描述性訊息
修正方式
記錄並監視API活動。
檢測異常可以幫助發現其他地方沒有發現的惡意活動。
禁用CORS(跨源資源共享)
或者將CORS的範圍縮小到最小,以防止偽造的請求或資料洩漏。
返回模糊的錯誤回應。
向用戶返回錯誤時,請盡可能少地提供訊息。
不要返回有關服務器環境的任何訊息或調試訊息,例如堆疊紀錄。
風險等級
根據情況從低到高不等。
留言
追蹤
檢舉
上一篇
Ruby 最佳實踐
下一篇
授權和認證開發方法
系列文
安全軟體開發生命週期(SSDLC)學習筆記
共
36
篇
目錄
RSS系列文
訂閱系列文
21
人訂閱
32
密碼開發方法
33
HTTP標頭開發方法
34
防止常見的Web攻擊開發方法
35
安全密碼儲存開發方法
36
安全系統開發方法
完整目錄
直播研討會
{{ item.subject }}
{{ item.channelVendor }}
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
1064
組
團體組數
40
組
累計文章數
22195
篇
完賽人數
600
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
windows server
linux
css
react
vue.js
熱門問題
請問內網IP如何轉外網IP?
兩端防火牆使用IPSEC互PING之問題
如何寫公式才能利用excel 觸發一個數據時傳送一個訊息給 自已的line呢?有沒有可以用其它方式,來取代line notify 的方法,因為line 開始收費
Windows7升級Windows10後網路功能異常
新手學習編程,哪種編程語言好?
python爬蟲 動態生成網頁104人力銀行
區域網路問題提問
vmware 虛擬機(windows)裡顯示使用容量與實際檔案容量不符合
防火牆與DNS請教
2台 Hyper-V 2008 R2 叢集主機(硬體規格相同), 如何加入一台新機? 謝謝.
熱門回答
請問內網IP如何轉外網IP?
防火牆與DNS請教
新手學習編程,哪種編程語言好?
Fortigate 50B 重置密碼
區域網路問題提問
熱門文章
每日一篇學習筆記 直到我做完專題 :( [Day32]
每日一篇學習筆記 直到我做完專題 :( [Day33]
每日一篇學習筆記 直到我做完專題 :( [Day34]
每日一篇學習筆記 直到我做完專題 :( [Day35]
隨時切換 WINDOWS 右鍵新舊版選單
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}